"""
    原问题：n条街道，预算为k元的方案数    dp[n][k]
    子问题：前i条街道，预算为j元的方案数  dp[i][j]
    状态转移：
           基于dp[0] dp[1] dp[i - 1] 怎么得到dp[i][j]
           第i条街道建1个房子 dp[i - 1][j - 1]
           第i条街道建2个房子 dp[i - 1][j - 2]
           ...
           第i条街道建m个房子 dp[i - 1][j - m]
"""

n, m, k = map(int, input().split())
dp = [[0] * (k + 1) for _ in range(n + 1)]
mod = int(1e9) + 7

for i in range(k + 1):  # 初始化
    # min(i, m)表示：如果预算i小于m，则最多只能建i个房子；
    # 如果预算i大于等于m，则最多只能建m个房子
    dp[1][i] = min(i, m)

for i in range(2, n + 1):
    for j in range(1, k + 1):
        dp[i][j] = sum(dp[i-1][max(0, j-m):j]) % mod

print(dp[n][k])